package com.boarsoft.boar.batch.service;

import com.boarsoft.boar.batch.entity.BatchExecution;

/**
 * 用于手动调起，续跑、重跑批量的接口<br/>
 * 批量应用端调起、续跑、重做或取消批量的接口
 * 
 * @author Mac_J
 *
 * @param <T>
 */
public interface BatchBrokerService {
	/**
	 * 将任务发往所有批量应用实例来执行
	 * 
	 * @param exe
	 *            执行记录
	 * @return 批量流程执行结果
	 * @throws Exception
	 */
	Object startAll(BatchExecution exe) throws Exception;

	/**
	 * 将任务发往某一个批量应用实例来执行
	 * 
	 * @param exe
	 *            执行记录
	 * @return 执行记录ID
	 * @throws Exception
	 */
	String start(BatchExecution exe) throws Exception;

	/**
	 * 续跑
	 * 
	 * @param exe
	 *            执行记录
	 * @return 批量流程执行结果
	 * @throws Exception
	 */
	String resume(BatchExecution exe) throws Exception;

	/**
	 * 重跑
	 * 
	 * @param exe
	 *            执行记录
	 * @return 批量流程执行结果
	 * @throws Exception
	 */
	String redo(BatchExecution exe) throws Exception;

	/**
	 * 暂停/中断/取消 任务
	 * 
	 * @param exe
	 *            执行记录
	 * @param force
	 *            是否强制中断
	 * @throws Exception
	 */
	void cancel(BatchExecution exe, boolean force) throws Exception;

	/**
	 * 广播方法，查询所有批量应用节点运行的所有批量任务，及其进度状态
	 * 
	 * @return
	 */
	Object stat();
}
